<!DOCTYPE HTML>
<!--
	Dimension by HTML5 UP
	html5up.net | @ajlkn
	Free for personal and commercial use under the CCA 3.0 license (html5up.net/license)
-->
<html>
 <head>
  <title>
   Dimension by HTML5 UP
  </title>
  <!-- <meta charset="utf-8" /> -->
  <!-- <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no" /> -->
  <meta charset="utf-8"/>
  <meta content="width=device-width,initial-scale=1.0" name="viewport"/>
  <link href="../../assets/css/article.css" rel="stylesheet"/>
  <link href="https://cdn.bootcss.com/highlight.js/9.15.8/styles/github.min.css" rel="stylesheet"/>
  <noscript>
   <link href="../../assets/css/noscript.css" rel="stylesheet"/>
  </noscript>
 </head>
 <body>
  <div id="app">
  </div>
  <!-- built files will be auto injected -->
 </body>
 <body class="is-preload">
  <!-- Wrapper -->
  <div id="wrapper">
   <!-- Main -->
   <div id="main">
    <article id="article">
     <h1 id="soul">
      Soul网关源码解析（二十二）数据同步小结
     </h1>
     <hr/>
     <h2 id="_1">
      简介
     </h2>
     <p>
      经过前面几篇文章的探索，初步把数据同步相关的都走了一遍，本篇文章就做一个小结
     </p>
     <h2 id="_2">
      总结
     </h2>
     <p>
      相关部分思维导图如下：
     </p>
     <p>
      <img alt="" src="./picture/datasync.png"/>
     </p>
     <p>
      如上所示，数据同步分为两大模块：
     </p>
     <ul>
      <li>
       Bootstrap端
      </li>
      <li>
       Admin端
      </li>
     </ul>
     <p>
      需要进行逐注意的是，两边的同步方式必须保持一致，这样才能正常进行数据同步
     </p>
     <p>
      在解析的过程中，发现是可以开启多种数据同步方式的，但一般不建议这样做
     </p>
     <p>
      推荐的同步方式是Zookeeper和Websocket，他们都是增量数据更新的
     </p>
     <p>
      HTTP、Nacos是全量更新的
     </p>
     <h3 id="admin">
      Admin端数据同步
     </h3>
     <p>
      Admin端的数据同步套路基本一致，都是通过事件发布进行的
     </p>
     <ul>
      <li>
       初始化事件：触发从数据库中读取所有数据进行同步
      </li>
      <li>
       更新事件（更改和删除）：触发相应的处理
      </li>
     </ul>
     <p>
      更新事件目前的唯一的触发入口都是Web Controllers，后面新加的可能还有Zookeeper
     </p>
     <p>
      这边需要注意的是HTTP的同步方式，初始化事件是自己启动配置时触发的；更新事件先刷新本地缓存，再发送更新
     </p>
     <h3 id="bootstrap">
      Bootstrap端
     </h3>
     <p>
      Bootstrap端基本套路都是一样，首先初始化、更新时，下发到各个数据的subscribe即可
     </p>
     <p>
      初始化启动时都是拉取的全量数据进行本地缓存刷新
     </p>
     <p>
      Zookeeper、Websocket都是增量数据更新，HTTP、Nacos是全量数据更新
     </p>
    </article>
   </div>
   <!-- Footer -->
   <footer id="footer">
    <p class="copyright">
     © Untitled. Design:
     <a href="https://html5up.net">
      HTML5 UP
     </a>
     .
    </p>
   </footer>
  </div>
  <!-- BG -->
  <div id="bg">
  </div>
  <!-- Scripts -->
  <script src="../assets/js/jquery.min.js">
  </script>
  <script src="../assets/js/browser.min.js">
  </script>
  <script src="../assets/js/breakpoints.min.js">
  </script>
  <script src="../assets/js/util.js">
  </script>
  <script src="../assets/js/main.js">
  </script>
 </body>
</html>
